¿Qué es un documento reproducible?

Este término proviene del mundo de la investigación científica en donde una investigación es considerada reproducible o replicable si existe información suficiente para que un grupo de investigadores independientes con nuevos datos, siguiendo el procedimiento indicado, puedan obtener los mismos resultados que la investigación original.

“Los datos y el código utilizados para realizar un descubrimiento estan disponibles y son suficientes para que otro investigador pueda replicar el descubrimiento” Xie, Y. (2016).


Lectura recomendadas.


Para crear generar nuestros documentos necesitamos instalar los siguiente paquetes.

install.packages("knitr",dependencies = T)
install.packages("rmarkdown", dependencies = T)

Una vez instalado debemos seguir los siguiente pasos para generar nuestro primer documento y confirmar que tenemos instalado correctamente todas la dependencias.

  • Paso 1 : Abrir Rstudio

  • Paso 2 : En la parte superior izquierda de la pantalla damos clic en File > New File > R Markdown como podemos ver en la imagen.

label

  • Paso 3 : Seleccionamos la opción Document en el menú izquierdo, ingresamos el título de nuestro documento y el nombre del autor, seleccionamos el formato de salida HTML
Requisitos para otros formatos de salida.
Si desea utilizar como formato de salida PDF debe tener previamente instalado LaTeX en su computadora Latex para Mac, Latex para Windows, si desea generar un documento de Microsoft Word debe tener este previamente instalado en su computador.
label

Si has seguido correctamente los pasos deberías tener un resultado muy similar a este:


  • Paso 4 : Guardamos el documento y le damos un nombre (preferiblemente sin espacios en blanco ni caracteres especiales)

  • Paso 5 : Generar el documento, para esto presionamos el botón con el tíitulo Knit en la parte superior como se ve en la imagen.

  • Paso 6 : Verificamos que el documento se generó correctamente, RStudio abrirá una ventana de previsualización donde podremos ver un documento similar a este.

Ahora que podemos generar nuestros documentos es momento de personalizarlo.

YAML (Encabezado).

---
title: "Untitled"
author: "Nombre del Autor"
date: "00/00/0000"
output: html_document
---

YAML es formato de especificación de datos basado en texto pensado para su fácil lectura, en nuestros documentos nos permitirá indicar información como:

  • title = titulo
  • author = autor
  • date = fecha de publicación
  • output: : formato de salida

Algunas de estas opciones que no están disponibles en todos los formatos, para el formato HTML tememos la posibilidad de utilizar diferentes temas, el parámetro theme indica el tema del documento y highlight el tema del código.

output:
  html_document:
    theme: united 
    highlight: tango

Entre los temas de documento tenemos disponibles están : “default”, “cerulean”, “journal”, “flatly”, “readable”, “spacelab”, “united”, “cosmo”, “lumen”, “paper”, “sandstone”, “simplex”, y “yeti”.

Mientras que como temas para el código podemos encontrar : “default”, “tango”, “pygments”, “kate”, “monochrome”, “espresso”, “zenburn”, “haddock”, y “textmate”.

Nuestro primer documento tendrá un YAML muy similar a este :

---
title: "Mi primer documento"
author: "Nombre del Autor"
date: "00/00/000"
output: html_document
---

Cuerpo del documento.

El cuerpo de nuestro documento estará compuesto principalmente por, texto, imagenes, enlaces a otros documentos y códito en R, tablas de datos, gráficos entre otros, a continuación vamos a aprender como darle formato a nuestro texto.

Texto

Con Markdown podemos darle diversos formatos a nuestro texto desde el tamaño:


Como se ven en Markdown

# Texto
## Texto
### Texto
#### Texto
##### Texto

Como se ve en el documento generado

Texto

Texto

Texto

Texto

Texto

variaciones entre negrita, italica, texto tachado y formulas matemáticas \(\sum_{i=1}^{10} t_i\)


Como se ven en Markdown

**negrita**
*itálica*
~~texto tachado~~
$\sum_{i=1}^{10} t_i$ 

Como se ve en el documento generado

negrita

itálica

texto tachado

\(\sum_{i=1}^{10} t_i\)

En el caso de las fórmulas matemáticas se utiliza la sintaxis de Latex para generar las fórmulas, para ver sobre el tema puedes ir al siguiente enlace Fórmulas matemáticas.


Tanto los enlaces como las imágenes tiene una sintaxis muy similar.

[nombre del enlace](diraccion url)

####Ejemplo
[Formulas matemáticas](http://csrgxtu.github.io/2015/03/20/Writing-Mathematic-Fomulars-in-Markdown/)

Ejemplo

Formulas matemáticas

O en el caso de una imagen

![nombre de la imagen](ruta de la imagen)
####Ejemplo
![](rstudio_logo.png)

Ejemplo

Las listas también son sencillas de hacer utilizando markdown


Como se ven en Markdown

* unordered list
* item 2
    + sub-item 1
    + sub-item 2
1. ordered list
2. item 2
    + sub-item 1
    + sub-item 2

¿Cómo se ve en el documento generado?

  • unordered list
  • item 2
    • sub-item 1
    • sub-item 2
  1. ordered list
  2. item 2
    • sub-item 1
    • sub-item 2

Y por último tenemos la opción de crear tablas


¿Cómo se ven en Markdown?

Table Header  | Second Header
------------- | -------------
Table Cell    | Cell 2
Cell 3        | Cell 4

¿Cómo se ve en el documento generado?

Table Header Second Header
Table Cell Cell 2
Cell 3 Cell 4

Código R

Hasta ahora hemos utilizado Rstudio como editor de texto pero su verdadera potencia está en la capacidad de ejecutar código en R, para esto utilizaremos porciones de código llamados “chunks” en donde podremos nuestro código y al generar el documento este será ejecutado.

Ejemplo de chunk

Así se ve nuestro código en el documento sin generar.

Así se ve nuestro código en el documento generado.

Es importante tomar en cuenta que si queremos cargar algún paquete, hacer alguna configuración para nuestro documento o definir una variable global es recomendado hacerlo en el primer chunk que encontrarás en el documento generado por R para este fin.

Un chunk nos permite a través de una serie de parámetros modificar su comportamiento.

  • echo = FALSE (no se muestra el código, pero sí el resultado)
  • eval = FALSE (no se ejecuta el código, pero se muestra en el documento)
  • include = FALSE (el código se ejecuta pero no se muestra ni el código ni el resultado)
  • message = TRUE (permite que un chunk genera mensajes)
  • warning = TRUE (permite que un chunk genera alertas)
  • error = TRUE (permite que un chunk genera errores)

Lectura de archivos xls (Excel) desde R.

Después del formato .csv el formato .xls (Excel 2003) y .xlsx (Excel 2007 en adelante) es el tipo de archivo más utilizado para almacenar y comunicar datos entre equipos de trabajo, para esto utilizaremos las facilidades que nos permite el paquete readxl.

install.packages("readxl")

El paquete nos permite utilizar algunos archivos xls y xlsx que este incluye, inicialmente trabajaremos con estos y luego repetiremos nuestro trabajo utilizando nuestro propio archivo.

  1. Cargamos el paquete:
library(readxl)
  1. Pedimos la ruta del archivo de ejemplo llamado “datasets.xls”:
xls_ejemplo <- readxl_example("datasets.xls")
xls_ejemplo
[1] "/Library/Frameworks/R.framework/Versions/3.4/Resources/library/readxl/extdata/datasets.xls"
  1. Leemos el archivo xls:
datos <- read_excel(xls_ejemplo)
datos
# A tibble: 150 x 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl>   <chr>
 1          5.1         3.5          1.4         0.2  setosa
 2          4.9         3.0          1.4         0.2  setosa
 3          4.7         3.2          1.3         0.2  setosa
 4          4.6         3.1          1.5         0.2  setosa
 5          5.0         3.6          1.4         0.2  setosa
 6          5.4         3.9          1.7         0.4  setosa
 7          4.6         3.4          1.4         0.3  setosa
 8          5.0         3.4          1.5         0.2  setosa
 9          4.4         2.9          1.4         0.2  setosa
10          4.9         3.1          1.5         0.1  setosa
# ... with 140 more rows

Es importante tomar en cuenta que un archivo de Excel normalmente se encuentra compuesto por varias hojas de cálculo, la función read_excel por defecto leerá la primera de estas hojas pero si queremos sabe cuantas hojas componen nuestro archivo y leer alguna es especifico podemos utilizar el comando excel_sheets.

excel_sheets(xls_ejemplo)
[1] "iris"     "mtcars"   "chickwts" "quakes"  

Como podemos ver este archivo esta compuesto por 4 hojas de datos y por defecto la función read_excel seleccionó la hoja de datos iris, podemos indicarle cual leer utilizando el parámetro sheet.

datos <- read_excel(xls_ejemplo, sheet = "mtcars")
datos
# A tibble: 32 x 11
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4
 2  21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4
 3  22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1
 4  21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1
 5  18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2
 6  18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1
 7  14.3     8 360.0   245  3.21 3.570 15.84     0     0     3     4
 8  24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2
 9  22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2
10  19.2     6 167.6   123  3.92 3.440 18.30     1     0     4     4
# ... with 22 more rows

Leyendo nuestro propio archivo Excel

  1. Localizar nuestro archivo : Utilizando el buscador de archivos de RStudio
  1. Establecer directorio de trabajo.

Para que R pueda encontrar nuestro archivo debemos indicarle el directorio donde están los archivos que vamos a utilizar, lo recomendado es tener todos los archivos en una sola carpeta.

  1. Verificamos cuantas hojas tiene nuestro archivo.
excel_sheets("EjemploEstudiantes.xlsx")
Warning in strptime(x, format, tz = tz): unknown timezone 'zone/tz/2017c.
1.0/zoneinfo/America/Costa_Rica'
[1] "Notas"

Como podemos ver nuestro archivo esta compuesto únicamente por una hoja de datos.

  1. Leer archivo.
datos <- read_excel("EjemploEstudiantes.xlsx")
datos
# A tibble: 10 x 6
     X__1 Matematicas Ciencias Espanol Historia EdFisica
    <chr>       <dbl>    <dbl>   <dbl>    <dbl>    <dbl>
 1  Lucia         7.0      6.5     9.2      8.6      8.0
 2  Pedro         7.5      9.4     7.3      7.0      7.0
 3   Ines         7.6      9.2     8.0      8.0      7.5
 4   Luis         5.0      6.5     6.5      7.0      9.0
 5 Andres         6.0      6.0     7.8      8.9      7.3
 6    Ana         7.8      9.6     7.7      8.0      6.5
 7 Carlos         6.3      6.4     8.2      9.0      7.2
 8   Jose         7.9      9.7     7.5      8.0      6.0
 9  Sonia         6.0      6.0     6.5      5.5      8.7
10  Maria         6.8      7.2     8.7      9.0      7.0

Cantidad de filas que se van a leer n_max:

datos <- read_excel("EjemploEstudiantes.xlsx",n_max = 4)
datos
# A tibble: 4 x 6
   X__1 Matematicas Ciencias Espanol Historia EdFisica
  <chr>       <dbl>    <dbl>   <dbl>    <dbl>    <dbl>
1 Lucia         7.0      6.5     9.2      8.6      8.0
2 Pedro         7.5      9.4     7.3      7.0      7.0
3  Ines         7.6      9.2     8.0      8.0      7.5
4  Luis         5.0      6.5     6.5      7.0      9.0

Rango de las celdas de Excel que se leerán:

datos <- read_excel("EjemploEstudiantes.xlsx", range = "C1:E4")
datos
# A tibble: 3 x 3
  Ciencias Espanol Historia
     <dbl>   <dbl>    <dbl>
1      6.5     9.2      8.6
2      9.4     7.3      7.0
3      9.2     8.0      8.0

Rango de filas o columnas a leer:

datos <- read_excel("EjemploEstudiantes.xlsx", range = cell_rows(1:4))
datos
# A tibble: 3 x 6
   X__1 Matematicas Ciencias Espanol Historia EdFisica
  <chr>       <dbl>    <dbl>   <dbl>    <dbl>    <dbl>
1 Lucia         7.0      6.5     9.2      8.6      8.0
2 Pedro         7.5      9.4     7.3      7.0      7.0
3  Ines         7.6      9.2     8.0      8.0      7.5
datos <- read_excel("EjemploEstudiantes.xlsx",range = cell_cols("B:D"))
datos
# A tibble: 10 x 3
   Matematicas Ciencias Espanol
         <dbl>    <dbl>   <dbl>
 1         7.0      6.5     9.2
 2         7.5      9.4     7.3
 3         7.6      9.2     8.0
 4         5.0      6.5     6.5
 5         6.0      6.0     7.8
 6         7.8      9.6     7.7
 7         6.3      6.4     8.2
 8         7.9      9.7     7.5
 9         6.0      6.0     6.5
10         6.8      7.2     8.7

En R existe la figura del valor ausente que ya hemos visto se representa con NA, es común que cada grupo de trabajo defina que valor utilizará para hacer referencia a los datos ausentes, por ejemplo “N/A” o “NS/NC”, el parámetro na nos permite indicar el valor que utilizamos en nuestro archivo de Excel y R lo remplazará este valor por NA.

datos <- read_excel("EjemploEstudiantes02.xlsx", na = "-")
datos
# A tibble: 10 x 6
     X__1 Matematicas Ciencias Espanol Historia EdFisica
    <chr>       <dbl>    <dbl>   <dbl>    <dbl>    <dbl>
 1  Lucia         7.0      6.5     9.2      8.6      8.0
 2  Pedro         7.5      9.4     7.3      7.0      7.0
 3   Ines         7.6      9.2     8.0       NA      7.5
 4   Luis         5.0      6.5     6.5      7.0      9.0
 5 Andres         6.0       NA     7.8      8.9      7.3
 6    Ana         7.8      9.6     7.7      8.0      6.5
 7 Carlos         6.3      6.4     8.2      9.0      7.2
 8   Jose         7.9      9.7     7.5       NA      6.0
 9  Sonia         6.0      6.0     6.5      5.5      8.7
10  Maria         6.8      7.2     8.7      9.0      7.0

Es muy importante tener en consideración es que al leer una tabla de Excel los nombres de fila se leerán como una variable más dentro de nuestra tabla para hacer algunos análsis que requieren sólo variables numéricas hacemos la siguiente modificación.

datos <- read_excel("EjemploEstudiantes.xlsx")
datos <- as.data.frame(datos)
rownames(datos) <- datos$X__1
datos <- datos[,-1]
str(datos)
'data.frame':   10 obs. of  5 variables:
 $ Matematicas: num  7 7.5 7.6 5 6 7.8 6.3 7.9 6 6.8
 $ Ciencias   : num  6.5 9.4 9.2 6.5 6 9.6 6.4 9.7 6 7.2
 $ Espanol    : num  9.2 7.3 8 6.5 7.8 7.7 8.2 7.5 6.5 8.7
 $ Historia   : num  8.6 7 8 7 8.9 8 9 8 5.5 9
 $ EdFisica   : num  8 7 7.5 9 7.3 6.5 7.2 6 8.7 7
datos
       Matematicas Ciencias Espanol Historia EdFisica
Lucia          7.0      6.5     9.2      8.6      8.0
Pedro          7.5      9.4     7.3      7.0      7.0
Ines           7.6      9.2     8.0      8.0      7.5
Luis           5.0      6.5     6.5      7.0      9.0
Andres         6.0      6.0     7.8      8.9      7.3
Ana            7.8      9.6     7.7      8.0      6.5
Carlos         6.3      6.4     8.2      9.0      7.2
Jose           7.9      9.7     7.5      8.0      6.0
Sonia          6.0      6.0     6.5      5.5      8.7
Maria          6.8      7.2     8.7      9.0      7.0